﻿using System;
using System.Web.UI.WebControls;
using AjaxControlToolkit;
using System.ComponentModel;
using System.Configuration;
using System.Web.UI;

[assembly: System.Web.UI.WebResource("WeclValidador.WeclValidadorBehavior.js", "text/javascript")]
namespace WeclValidador
{
    [Designer(typeof(WeclValidadorDesigner))]
    [ClientScriptResource("WeclValidador.WeclValidadorBehavior", "WeclValidador.WeclValidadorBehavior.js")]
    [TargetControlType(typeof(TextBox))]
    public class WeclValidadorExtender : ExtenderControlBase
    {
        [Description("Tipo de validacion a aplicar.")]
        [ExtenderControlProperty]
        [DefaultValue(TiposValidacion.SinValidacion)]
        public TiposValidacion TipoValidacion
        {
            get { return GetPropertyValue<TiposValidacion>("TipoValidacion", TiposValidacion.SinValidacion); }
            set { SetPropertyValue<TiposValidacion>("TipoValidacion", value); }
        }
        [Description("Para el caso de enteros y decimales se define si se permite o no el signo negativo.")]
        [ExtenderControlProperty]
        [DefaultValue(TiposValidacionSignoNegativo.NoSePermiteSignoNegativo)]
        public TiposValidacionSignoNegativo SePermiteNegativo
        {
            get { return GetPropertyValue<TiposValidacionSignoNegativo>("SePermiteNegativo", TiposValidacionSignoNegativo.NoSePermiteSignoNegativo); }
            set { SetPropertyValue<TiposValidacionSignoNegativo>("SePermiteNegativo", value); }
        }

        [Description("Numero de decimales en caso de que el tipo de validacion sea decimal. Valores >= 0")]
        [ExtenderControlProperty]
        [DefaultValue(-1)]
        public int NumeroDecimales
        {
            get { return GetPropertyValue("NumeroDecimales", -1); }
            set { SetPropertyValue("NumeroDecimales", value); }
        }
        [Description("Cadena de Evaluacion, este valor no puede ser ingresado en modo diseño, busca valor en web.config si no lo encuentra toma el seteado por defecto")]
        [ExtenderControlProperty]
        [DefaultValue("No aplicable")]
        public string CadenaEvaluacion
        {
            get
            {
                switch (TipoValidacion)
                {
                    case TiposValidacion.SinValidacion:
                        {
                            #region Sin validacion
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ_@.- 0123456789*-+/{}[]¿'|#$%&()=";
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarEntero:
                        {
                            #region ValidarEntero
                            string cadena = "-0123456789";
                            if (ConfigurationManager.AppSettings.Get("ValidarEntero") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarEntero").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarEntero").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarDecimal:
                        {
                            #region ValidarDecimal
                            string cadena = "-,.0123456789";
                            if (ConfigurationManager.AppSettings.Get("ValidarDecimal") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarDecimal").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarDecimal").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarNombres:
                        {
                            #region ValidarNombres
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ ";
                            if (ConfigurationManager.AppSettings.Get("ValidarNombres") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarNombres").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarNombres").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarMail:
                        {
                            #region ValidarMail
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ_@.-";
                            if (ConfigurationManager.AppSettings.Get("ValidarMail") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarMail").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarMail").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarFecha:
                        {
                            #region ValidarFecha
                            string cadena = "0123456789/";
                            if (ConfigurationManager.AppSettings.Get("ValidarFecha") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarFecha").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarFecha").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarDireccion:
                        {
                            #region ValidarDireccion
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ 0123456789.";
                            if (ConfigurationManager.AppSettings.Get("ValidarDireccion") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarDireccion").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarDireccion").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarTelefono:
                        {
                            #region ValidarTelefono
                            string cadena = "0123456789-";
                            if (ConfigurationManager.AppSettings.Get("ValidarTelefono") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarTelefono").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarTelefono").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarDocIdentidad:
                        {
                            #region ValidarDocIdentidad
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ-0123456789";
                            if (ConfigurationManager.AppSettings.Get("ValidarDocIdentidad") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarDocIdentidad").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarDocIdentidad").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarSoloCaracteres:
                        {
                            #region ValidarSoloCaracteres
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
                            if (ConfigurationManager.AppSettings.Get("ValidarSoloCaracteres") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarSoloCaracteres").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarSoloCaracteres").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarPersonalizado1:
                        {
                            #region ValidarPersonalizado1
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
                            if (ConfigurationManager.AppSettings.Get("ValidarPersonalizado1") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarPersonalizado1").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarPersonalizado1").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarPersonalizado2:
                        {
                            #region ValidarPersonalizado2
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
                            if (ConfigurationManager.AppSettings.Get("ValidarPersonalizado2") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarPersonalizado2").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarPersonalizado2").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    case TiposValidacion.ValidarPersonalizado3:
                        {
                            #region ValidarPersonalizado3
                            string cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
                            if (ConfigurationManager.AppSettings.Get("ValidarPersonalizado3") != null)
                            {
                                if (ConfigurationManager.AppSettings.Get("ValidarPersonalizado3").ToString().Length > 0)
                                {
                                    cadena = ConfigurationManager.AppSettings.Get("ValidarPersonalizado3").ToString();
                                }
                            }
                            return GetPropertyValue("CadenaEvaluacion", cadena);
                            #endregion
                        }
                    default:
                        {
                            #region ValorPorDefecto
                            string cadenaopcional = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ_@.- 0123456789*-+/{}[]¿'|#$%&()=";
                            return GetPropertyValue("CadenaEvaluacion", cadenaopcional);
                            #endregion
                        }
                }
            }
            set { SetPropertyValue("CadenaEvaluacion", value); }

        }


        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Justification = "Assembly is not localized")]
        protected override bool CheckIfValid(bool throwException)
        {
            if (TipoValidacion == TiposValidacion.ValidarDecimal && (
                 (TipoValidacion == TiposValidacion.ValidarDecimal && NumeroDecimales < 0)))
            {
                if (throwException)
                {
                    throw new InvalidOperationException("Si el tipo de validacion es decimal por favor proveer un numero de decimales valido");
                }
                return false;
            }
            return base.CheckIfValid(throwException);
        }

    }
}
